<!DOCTYPE html>
<html>
<!-- Created by GNU Texinfo 7.1, https://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!-- Copyright © 1987-2023 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation.  A copy of
the license is included in the
section entitled "GNU Free Documentation License".

This manual contains no Invariant Sections.  The Front-Cover Texts are
(a) (see below), and the Back-Cover Texts are (b) (see below).

(a) The FSF's Front-Cover Text is:

A GNU Manual

(b) The FSF's Back-Cover Text is:

You have freedom to copy and modify this GNU Manual, like GNU
     software.  Copies published by the Free Software Foundation raise
     funds for GNU development. -->
<title>Traditional warnings (The C Preprocessor)</title>

<meta name="description" content="Traditional warnings (The C Preprocessor)">
<meta name="keywords" content="Traditional warnings (The C Preprocessor)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta name="viewport" content="width=device-width,initial-scale=1">

<link href="index.html" rel="start" title="Top">
<link href="Index-of-Directives.html" rel="index" title="Index of Directives">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Traditional-Mode.html" rel="up" title="Traditional Mode">
<link href="Traditional-miscellany.html" rel="prev" title="Traditional miscellany">
<style type="text/css">
<!--
a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
span:hover a.copiable-link {visibility: visible}
ul.mark-bullet {list-style-type: disc}
-->
</style>


</head>

<body lang="en">
<div class="section-level-extent" id="Traditional-warnings">
<div class="nav-panel">
<p>
Previous: <a href="Traditional-miscellany.html" accesskey="p" rel="prev">Traditional miscellany</a>, Up: <a href="Traditional-Mode.html" accesskey="u" rel="up">Traditional Mode</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index-of-Directives.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<h3 class="section" id="Traditional-warnings-1"><span>10.4 Traditional warnings<a class="copiable-link" href="#Traditional-warnings-1"> &para;</a></span></h3>
<p>You can request warnings about features that did not exist, or worked
differently, in traditional C with the <samp class="option">-Wtraditional</samp> option.
GCC does not warn about features of ISO C which you must use when you
are using a conforming compiler, such as the &lsquo;<samp class="samp">#</samp>&rsquo; and &lsquo;<samp class="samp">##</samp>&rsquo;
operators.
</p>
<p>Presently <samp class="option">-Wtraditional</samp> warns about:
</p>
<ul class="itemize mark-bullet">
<li>Macro parameters that appear within string literals in the macro body.
In traditional C macro replacement takes place within string literals,
but does not in ISO C.

</li><li>In traditional C, some preprocessor directives did not exist.
Traditional preprocessors would only consider a line to be a directive
if the &lsquo;<samp class="samp">#</samp>&rsquo; appeared in column 1 on the line.  Therefore
<samp class="option">-Wtraditional</samp> warns about directives that traditional C
understands but would ignore because the &lsquo;<samp class="samp">#</samp>&rsquo; does not appear as the
first character on the line.  It also suggests you hide directives like
&lsquo;<samp class="samp">#pragma</samp>&rsquo; not understood by traditional C by indenting them.  Some
traditional implementations would not recognize &lsquo;<samp class="samp">#elif</samp>&rsquo;, so it
suggests avoiding it altogether.

</li><li>A function-like macro that appears without an argument list.  In some
traditional preprocessors this was an error.  In ISO C it merely means
that the macro is not expanded.

</li><li>The unary plus operator.  This did not exist in traditional C.

</li><li>The &lsquo;<samp class="samp">U</samp>&rsquo; and &lsquo;<samp class="samp">LL</samp>&rsquo; integer constant suffixes, which were not
available in traditional C.  (Traditional C does support the &lsquo;<samp class="samp">L</samp>&rsquo;
suffix for simple long integer constants.)  You are not warned about
uses of these suffixes in macros defined in system headers.  For
instance, <code class="code">UINT_MAX</code> may well be defined as <code class="code">4294967295U</code>, but
you will not be warned if you use <code class="code">UINT_MAX</code>.

<p>You can usually avoid the warning, and the related warning about
constants which are so large that they are unsigned, by writing the
integer constant in question in hexadecimal, with no U suffix.  Take
care, though, because this gives the wrong result in exotic cases.
</p></li></ul>

</div>
<hr>
<div class="nav-panel">
<p>
Previous: <a href="Traditional-miscellany.html">Traditional miscellany</a>, Up: <a href="Traditional-Mode.html">Traditional Mode</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index-of-Directives.html" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>
